<?php

namespace app\common\model;

use houdunwang\arr\Arr;
use think\Model;

class Category extends Model
{
    //定义主键和数据表
    protected $pk='cate_id';
    protected $table='blog_cate';

    /**
     * 添加栏目列表
     * @param $data
     */
    public function store($data){
     //执行验证、添加
        $result=$this->validate(true)->save($data);
        if(false===$result){
            //验证失败
            return(['valid'=>0,'msg'=>$this->getError()]);
        }else{
            return(['valid'=>1,'msg'=>'添加成功']);
        }
    }

    /**
     * 获取分类数据【树状结构】
     */
    public function getAll(){
        //使用方法参考HDPHP手册【hdphp.com]->搜索数组增强->tree
        return Arr::tree(db('cate')->order('cate_id asc,cate_sort desc')->select(),'cate_name',$fieldPri='cate_id',$fieldPid='cate_pid');
    }

    /**
     * 处理所属分类
     */
    public function getCateData($cate_id)
    {
        //首先找到当前这条的子集
        $cate_ids=$this->getSon(db('cate')->select(),$cate_id);
        //将自已追加进去
        $cate_ids[]=intval($cate_id);
        //找到除了他们之外的数据，并且变成树状结构
        $field=db('cate')->whereNotIn('cate_id',$cate_ids)->select();
        return Arr::tree($field,'cate_name','cate_id','cate_pid');
    }

    public function getSon($data,$cate_id)
    {
        static $temp=[];
        foreach ($data as $key=>$v) {
            if($cate_id==$v['cate_pid'])
            {
                $temp[]=$v['cate_id'];
                $this->getSon($data,$v['cate_id']);
            }
        }
        return $temp;
    }

    public function edit($data)
    {
        //此处应该为更新数据，而不是添加数据
        $result=$this->validate(true)->save($data,[$this->pk=>$data['cate_id']]);
        if($result)
        {
            //执行成功
            return ['valid'=>1,'msg'=>'编辑成功'];
        }else{
            return ['valid'=>0,'msg'=>'编辑失败，请重试'];
        }
    }

    /**
     * 删除方法
     * @param $cate_id
     */
    public function del($cate_id){
        //获取当前要删除数据的cate_pid
        $cate_pid=$this->where('cate_id',$cate_id)->value('cate_pid');
        //将当前要删除的$cate_id的子集数据的PID修改成$cate_pid
        $this->where('cate_pid',$cate_id)->update(['cate_pid'=>$cate_pid]);
        //执行当前数据的删除
       if($this->destroy($cate_id))
        {
            return ['valid' => 1, 'msg' => '删除成功'];

        }else{
            return['valid'=>0,'msg'=>'删除失败'];
        }
    }
}
